from sqlalchemy import Column, String, INT, BOOLEAN, DATETIME
from sqlalchemy.ext.declarative import declarative_base
from py.DBUtil import Engine


def Record_class(base=declarative_base()):
    class Record(base):
        __tablename__ = "lendlisttable"

        __table_args__ = {'extend_existing': True}

        ReaderID = Column(INT, primary_key=True, nullable=False)

        ISBN = Column(String(30), primary_key=True, nullable=False)

        bookname = Column(String(30), nullable=False)

        lendNum = Column(INT, nullable=False)

        LendDate = Column(DATETIME, nullable=False, primary_key=True)

        ReturnDate = Column(DATETIME)

        isReturned = Column(BOOLEAN, nullable=False, default=0)

        isLost = Column(BOOLEAN, default=0)

        session = Engine.DBSession()

        def __getitem__(self, item):
            '''内置方法, 当使用obj['name']的形式的时候, 将调用这个方法, 这里返回的结果就是值'''
            return getattr(self, item)

        def keys(self):
            '''当对实例化对象使用dict(obj)的时候, 会调用这个方法,这里定义了字典的键, 其对应的值将以obj['name']的形式取,
            但是对象是不可以以这种方式取值的, 为了支持这种取值, 可以为类增加一个方法'''
            return 'ReaderID', 'ISBN', 'bookname', 'lendNum', 'LendDate', 'ReturnDate', 'isReturned', 'isLost'

    return Record
